硬碟空間不足,無法進入容器,清除資料大作戰

#2024/07/16,docker compose設定方法

睡睡念

上週同事問我怎麼連進去容器裏面,
我很順的回答指令,
然後他就跳出 這個錯誤

failed to create runc console socket: mkdir /tmp/pty2070058578: no space left on device: unknown

正文

處理問題

從錯誤訊息看起來,就是空間不足。

先看看是哪邊硬碟吃滿了

df -h

然後看到user 100%...然後掛載在 / 根目錄下。
再來檢查當前目錄,每個資料夾的大小

du -hcd 1 | sort -n

最後追阿追的,追到了container的目錄

/var/lib/docker/
裏面有一些container容量吃得很多,
最後確認是該container的log,那就砍了吧。

rm -rf <container_id>.log

再請同事連線,還是出現同樣的錯誤,
是由於linux的特性,就算你砍了檔案,
此檔案還是被咬住沒有釋放開(window是連砍都不能砍),
所以此時去查硬碟大小,還是100% used的狀態,
將docker重開後,就能釋放空間了。


解決問題

現在知道是container的log會一直增長,
那就設個條件,讓他長到一定程度後就不能再長大了。

如果此路徑沒檔案,則建立

vim /etc/docker/daemon.json

輸入

{
    "log-driver":"json-file",
    "log-opts":{
        "max-size" :"500m","max-file":"3"
    }
}

max-size : 單個容器的單檔大小
max-file: log數量

好了後,重啓服務

systemctl daemon-reload
systemctl restart docker

需要注意的是:設定的日誌大小規則,只對新建的容器有效

ref.

2024/07/16,docker compose設定方法

在docker compose 增加下面語法

services:
  srs:
    container_name: srs
    logging:
      driver: "json-file"
      options:
        max-size: "300m"
        max-file: "3"